# 以下代码为使用Python中selenium自动化脚本模拟人的行为查询页面中数据

from selenium.webdriver import Chrome, Keys
from selenium.webdriver.common.by import By
import time
import pandas as pd

# 读取Excel中的数据
df = pd.read_excel('geography.xls')
df.dropna(axis=0, how='all', inplace=True)  # 删除空行
df.reset_index(drop=True, inplace=True)  # 重置索引

# 格式化经纬度数据,便于后续往前端传入指定格式的内容
data_list = [f"{row['经度']},{row['纬度']}" for _, row in df.iterrows()]

# 打开网页
web = Chrome()
web.get("https://map.yanue.net/")
time.sleep(3)  # 让网站充分加载出来，第一条数据可以准确获得

results = []
for i, coordinates in enumerate(data_list, start=1):
    # 获取要清空的元素
    element = web.find_element(By.XPATH, '//*[@id="latLng"]')
    element.send_keys(Keys.CONTROL + 'a')  # 使用键盘操作清空元素内容
    element.send_keys(Keys.BACK_SPACE)
    element.send_keys(coordinates)  # 输入数据

    web.find_element(By.XPATH, '//*[@id="toAddressBtn"]').click()  # 点击确定按钮
    time.sleep(2)  # 等待页面加载

    text = web.find_element(By.XPATH, '//*[@id="showResults"]').text  # 获取数据
    location = text.split('：', 1)[-1]  # 获取冒号之后的部分
    results.append(location)

    # 从后台简单查看一下数据是否获取成功，及数据获取到第几条
    print(f"第{i}条数据,{location}")

# 关闭浏览器
web.quit()

# 将结果添加到数据框的新列
df['地理位置'] = results

# 将数据框写入新的Excel文件,设置参数index=False来排除索引列
df.to_excel('selenium_result.xlsx', index=False)
